import xlrd
import json


def is_json(data):
    """
    封装一个判断是否是json函数
    data: 需要判断的字符串数据
    :return: 结果
    """
    try:
        return json.loads(data)  # 是json字符串-----直接返回转换后的字典数据
    except:
        return data  # 不是json--原符串返回


def get_excel_data(file_path, sheet_name, case_name, *args):
    res_list = []
    # 存放列编号
    col_index = []
    # 1.打开excel文件
    workbook = xlrd.open_workbook(file_path, formatting_info=True)
    # 2.操作对应的表
    work_sheet = workbook.sheet_by_name(sheet_name)
    # -----------------------下面是重要----------------------
    """
    示例：args = '请求参数','预期响应数据'
    args得到是一个元组
    """
    for one in args:  # '请求参数',    '预期响应数据'-----列编号
        col_index.append(work_sheet.row_values(0).index(one))  # 表头是一个列表，使用index 求值所在的下标
    # -----------------------------------------------------

    print('用户需要获取的数据的列编号是--->', col_index)
    row_index = 0  # 行编号初始值
    for one in work_sheet.col_values(0):
        if case_name in one:
            col_data = []
            for index in col_index:  # 需要获取列的编号-- [9,11，12]
                tmp = is_json(work_sheet.cell(row_index, index).value)  # 列编号有几个，就执行几次循环
                col_data.append(tmp)  # 这一行的 这个几列数据的结果
            res_list.append(tuple(col_data))  #
        row_index += 1  # 行号加

    return res_list


if __name__ == '__main__':
    get_excel_data('../data/cases.xls', '登录模块', 'token', '标题', '请求参数')
